package mx.ipn.persistencia.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import mx.ipn.persistencia.dao.BitacoraSDAO;
import mx.ipn.to.BitacoraSTO;
import mx.ipn.to.FechaHoraTO;

public class BitacoraSDAOMySQL implements BitacoraSDAO {
	static{FabricaDeDAOsMySQL.iniciaLog(BitacoraSDAOMySQL.class);}

	private static final String FINDBYIDOPERACION = "SELECT * FROM  bitacora_servicio WHERE id_operacion=?";

	private static final String SELECT = "SELECT * FROM  bitacora_servicio";
	private static final String UPDATE = "UPDATE  bitacora_servicio SET "
		+ "considerado=? WHERE id_operacion=?";
	@Override
	public BitacoraSTO findBitacoraSById(int idOperacion) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYIDOPERACION);
			ps.setInt(1, idOperacion);
			ResultSet rs = ps.executeQuery();

			BitacoraSTO bitacoraSTO = null;
			if (rs.next()) {
				idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");
				int idUsuarioTelefonista =rs.getInt("id_usuario_telefonista");
 				int idUsuarioOperadora= rs.getInt("id_usuario_operadora");
				short idFormaPago=rs.getShort("id_forma_pago");
	      	    int idCliente =rs.getInt("id_cliente");
	      	    int idDireccionDestino = rs.getInt("id_direccion_destino");
	      	    int idClienteDireccion = rs.getInt("id_cliente_direccion");
	      	    short idStatus = rs.getShort("id_status");
		        int idOperacionChofUni = rs.getInt("id_operacion_chof_uni");	
		        int idTipoServicio = rs.getInt("id_tipo_servicio");
				bitacoraSTO = new BitacoraSTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado,idUsuarioTelefonista,idUsuarioOperadora,idFormaPago,
			      	    idCliente,idDireccionDestino,idClienteDireccion,idStatus,
				        idOperacionChofUni,idTipoServicio);
			    //bitacoraSTO = new BitacoraSTO(idOperacion,observaciones, telefono);

				ps.close();
				conexion.close();
				return bitacoraSTO;
			}

			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraSTO> selectBitacoraS() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			ArrayList<BitacoraSTO> bitacoraSTO = null;
			BitacoraSTO bitacoraSTO2 = null;

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();
			if (bitacoraSTO == null) {
				bitacoraSTO = new ArrayList<BitacoraSTO>();

				/*fabricaMySQL = FabricaDeDAOs
						.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);*/
			}
			while (rs.next()) {
				
				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");
				int idUsuarioTelefonista =rs.getInt("id_usuario_telefonista");
 				int idUsuarioOperadora= rs.getInt("id_usuario_operadora");
				short idFormaPago=rs.getShort("id_forma_pago");
	      	    int idCliente =rs.getInt("id_cliente");
	      	    int idDireccionDestino = rs.getInt("id_direccion_destino");
	      	    int idClienteDireccion = rs.getInt("id_cliente_direccion");
	      	    short idStatus = rs.getShort("id_status");
		        int idOperacionChofUni = rs.getInt("id_operacion_chof_uni");	
		        int idTipoServicio = rs.getInt("id_tipo_servicio");
				bitacoraSTO2 = new BitacoraSTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado,idUsuarioTelefonista,idUsuarioOperadora,idFormaPago,
			      	    idCliente,idDireccionDestino,idClienteDireccion,idStatus,
				        idOperacionChofUni,idTipoServicio);
                //bitacoraSTO2 = new BitacoraSTO(idOperacion,observaciones, telefono);
				bitacoraSTO.add(bitacoraSTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraSTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	public short updateConsiderado(int id,Boolean considerado){
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setBoolean(1,considerado);
			ps.setInt(2,id);
			ps.executeUpdate();
			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}
}
